/**
 * @author VernHe
 * @date 2021年06月15日 10:48
 */
public class Solution_0200 {
    public int numIslands(char[][] grid) {
        if (null == grid || grid.length == 0) {
            return 0;
        }
        int result = 0;
        //循环整个二维数组
        for (int i = 0; i < grid.length; i++) {
            for (int j = 0; j < grid[0].length; j++) {
                // 如果是陆地，就进行dfs遍历
                if (grid[i][j] == '1') {
                    dfs(grid, i, j);
                    result++;
                }
            }
        }
        return result;
    }

    /**
     * 1表示陆地，2表示已经走过的陆地，0表示海洋
     * @param grid
     * @param i
     * @param j
     */
    private void dfs(char[][] grid,int i, int j) {
        // 如果没有越界且是陆地就进行遍历
        if (i < 0 || j < 0 || i >= grid.length || j >= grid[0].length || grid[i][j] != '1') {
            return;
        }
        // 表示是已经遍历过的陆地
        grid[i][j] = 2;
        // 上下左右进行Dfs
        dfs(grid,i-1,j);
        dfs(grid,i + 1,j);
        dfs(grid,i-1,j - 1);
        dfs(grid,i-1,j + 1);
    }

}
